<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    //封装集合类
    function Set(){
        //property
            //不适用数组，因为数组允许重复
            //使用对象

         //this.items与Set之间的关系是怎样的??????
        this.items = {};

        //method


        Set.prototype.add = function(value){
            //判断当前集合中是否已经包含该元素
            // 能否通过调用该属性来判断是否存在该元素？
            // 属性的调用应该会按照原型链向上查找，hasOwnProperty呢？？

            if(this.has(value)){
                return false;
            }
            //将元素添加到集合中
            this.items[value] = value;
            return true;
        };
        //has
        Set.prototype.has = function(value){
            return this.items.hasOwnProperty(value);
        };

        //remove
        Set.prototype.remove = function(){
            if(!this.has(value)){
                return false;
            }

            delete this.items[value];
            return true;
        };

        //clear 清除items中的所有属性
        Set.prototype.clear = function(){
          this.items = {};
        };
// ?????? Object.keys() —— 这个方法是干什么的
        //size
        Set.prototype.size = function(){
            return Object.keys(this.items).length;
        };
// ??????
        Set.prototype.value = function(){
            return Object.keys(this.items);
        };

        //集合间操作
        //并集
        Set.prototype.union = function(otherSet){
            var unionSet = new Set();
            alert(unionSet.size());
            console.log(unionSet);
            var values = this.value();

            for(var i = 0;i < values.length;i++){
                unionSet.add(values[i]);
            }

            values = otherSet.value();
            console.log(values);
            for(var i = 0;i<values.length;i++){

                unionSet.add(values[i]);

            }

            return unionSet;
        };


    }


    //test
    var set = new Set();
    console.log(set);
    set.add("123");
    set.add("asdf");
    set.add("fed");
    set.add("cdf");
    set.add("qaz");
    set.add("cdt");
    console.log(set.value());
    var set2 = new Set();
    console.log(set2.add("123"));
    console.log(set2.add("asdf"))
    console.log(set2.add("fed"));
    console.log(set2.add("qwe"));
    console.log(set2.add("ewq"));
    console.log(set2.add("wqe"));
    console.log(set2.value ());
    console.log(set.union(set2));;

</script>
</body>
</html>